package main

import "fmt"

//为什么需要切片
/*
看一个需求：需要一个数组用于保存学生的成绩，但是学生的个数是不确定的，怎么办
解决方案：使用切片
*/
/*
切片的基本介绍
1切片的英文是slice
2切片是数组的一个引用，因此切片是引用类型，在进行传递时，遵守引用传递的机制
3切片的使用和数组类似，遍历切片、访问切片的元素和求切片长度len(slice)都一样
4切片的长度是可以变化的，因此切片是一个可以动态变化数组
5切片定义的基本语法
 var 切片名 []类型
 var a []int
*/
/*
切片内存分布
1、slice的确是一个引用类型
2、slice从底层来说，其实就是一个数据结构（struct结构）
type slice struct{
	ptr *[2]int
	len int
	cap int
}
*/
func main() {
	var intArr [5]int = [...]int{1, 22, 33, 66, 99}
	//声明/定义一个切片
	//slice就是切片名
	//intArr[1:3]表示slice引用到intArr这个数组
	//引用intArr数组的起始下标为1，最后的下标为3（但是不包含3）
	slice := intArr[1:3]
	fmt.Println("intArr=", intArr)
	fmt.Println("slice的元素是=", slice)       //22,33
	fmt.Println("slice的元素个数=", len(slice)) //2
	fmt.Println("slice的容量是=", cap(slice))  //切片的容量是可以动态变化
}
